package aceim.app; import aceim.api.utils.Logger; import aceim.app.themeable.ThemesManager; import android.annotation.SuppressLint; import android.content.Context; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView.LayoutParams; public abstract class AceIMActivity extends FragmentActivity { private static final int top_bar_background = 0; private static final int bottom_bar_background = 1; private static final int screen_background = 2; private static final int bottom_bar_button_background = 3; private static final int accent_background = 4; private static final int grid_item_size = 5; private static final int list_item_height = 6; public static final int ARTIFICIAL_LAYOUT_MARKER = -8; private ThemesManager mThemesManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(null); mThemesManager = new ThemesManager(this); } @Override protected void onDestroy(){ super.onDestroy(); mThemesManager.onExit(); } /** * @return the mThemesManager */ public ThemesManager getThemesManager() { return mThemesManager; } @SuppressLint("NewApi") @SuppressWarnings("deprecation") public void setStyle(View view, AttributeSet attrs) { TypedArray styleables = getBaseContext().obtainStyledAttributes(attrs, R.styleable.StyleableView, 0, 0); Context themeContext = mThemesManager.getCurrentThemeContext(); int N = styleables.getIndexCount(); for (int i=0; i<N; i++) { int res = styleables.getIndex(i); int id; switch(styleables.getInt(res, -1)) { case bottom_bar_background: id = mThemesManager.getViewResources().getBottomBarBackgroundId(); break; case top_bar_background: id = mThemesManager.getViewResources().getTopBarBackgroundId(); break; case screen_background: id = mThemesManager.getViewResources().getScreenBackgroundId(); break; case bottom_bar_button_background: id = mThemesManager.getViewResources().getBottomBarButtonBackgroundId(); break; case grid_item_size: id = mThemesManager.getViewResources().getGridItemSizeId(); break; case list_item_height: id = mThemesManager.getViewResources().getListItemHeightId(); break; case accent_background: id = mThemesManager.getViewResources().getAccentBackgroundId(); break; default: styleables.recycle(); return; } try { switch (res) { case R.styleable.StyleableView_styleableBackground: Drawable d = themeContext.getResources().getDrawable(id); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { view.setBackgroundDrawable(d); } else { view.setBackground(d); } break; case R.styleable.StyleableView_styleableLayoutWidth: int width = themeContext.getResources().getDimensionPixelSize(id); if (view.getLayoutParams() != null) { view.getLayoutParams().width = width; } else { view.setLayoutParams(new ViewGroup.LayoutParams(width, ARTIFICIAL_LAYOUT_MARKER)); } break; case R.styleable.StyleableView_styleableLayoutHeight: int height = themeContext.getResources().getDimensionPixelSize(id); if (view.getLayoutParams() != null) { view.getLayoutParams().height = height; } else { view.setLayoutParams(new ViewGroup.LayoutParams(ARTIFICIAL_LAYOUT_MARKER, height)); } break; } } catch (Exception e) { Logger.log(e); } } styleables.recycle(); } public void fillLayoutParams(LayoutParams lp, AttributeSet attrs) { TypedArray styleables = getBaseContext().obtainStyledAttributes(attrs, R.styleable.StyleableView, 0, 0); Context themeContext = mThemesManager.getCurrentThemeContext(); int N = styleables.getIndexCount(); for (int i=0; i<N; i++) { int res = styleables.getIndex(i); int id; switch(styleables.getInt(res, -1)) { case grid_item_size: id = mThemesManager.getViewResources().getGridItemSizeId(); break; case list_item_height: id = mThemesManager.getViewResources().getListItemHeightId(); break; default: styleables.recycle(); return; } try { switch (res) { case R.styleable.StyleableView_styleableLayoutWidth: lp.width = themeContext.getResources().getDimensionPixelSize(id); break; case R.styleable.StyleableView_styleableLayoutHeight: lp.height = themeContext.getResources().getDimensionPixelSize(id); break; } } catch (Exception e) { Logger.log(e); } } styleables.recycle(); } }